#include<bits/stdc++.h>
#define sd(n) scanf("%d",&n) 
#define sld(n) scanf("%lld",&n)
#define pd(n) printf("%d", (n))
#define pld(n) printf("%lld", n)
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define fi first
#define se second
const int N=2e5;
const int maxn=1e6;
typedef long long int ll;
using namespace std;
//----------------------------------------------------------------------------//

struct node
{
	int x, w, id;    // x表示坐标值，w表示权值，id表示编号
}a[N];
 
bool cmp1(node a, node b){
	return a.w < b.w;
}
 
bool cmp2(node a, node b){
	return a.x < b.x;
}

void solve()
{
	int n, m;
    cin >> n >> m;
    for(int i = 1; i <= m; i++)
    {
    	cin >> a[i].x >> a[i].w;
    	a[i].id = i;
    }
    	
    sort(a + 1, a + m + 1, cmp1);
   	sort(a + 1, a + 2 * n + 1, cmp2);
 
    ll sum = 0;
    for(int i = 1; i <= 2 * n; i++)
    	sum += a[i].w;
    cout << sum << endl;
    	
    for(int i = 1; i <= n; i++)
    {
    	cout << a[i].id << ' ' << a[2 * n - i + 1].id << endl;
    }
    cout << endl;


}

int main()
{
	int T;
	sd(T);
	while (T--)
	{
		solve();
	}
	return 0;
}